package com.zhku.demoboot3_28mybatisp.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhku.demoboot3_28mybatisp.entity.User;
import com.zhku.demoboot3_28mybatisp.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author dewewy
 * @since 2023-03-28
 */
@RestController
@RequestMapping(value = "/user")
public class UserController {
    //依赖业务层
    @Autowired
    IUserService userService;

    //         使用jackson来转换map
    ObjectMapper objectMapper = new ObjectMapper();

    //查询所有的user数据返回
    @RequestMapping(value = "/list")
    public String list(
            @RequestParam(required = true, defaultValue = "1") Integer pageNum,
            @RequestParam(required = true, defaultValue = "1") Integer pageSize,
            @RequestParam(required = false, defaultValue = "") String keyword  //关键词
    ) throws JsonProcessingException {
        // 定义一个map来存放json的键值对
        Map result = new HashMap();
        // 先看一下数据的额总记录数，如果小于每一页的记录数，就只返回一页
//        int count = userService.count();
//        if (count < pageNum) {
//            pageNum = 1;
//            Page<User> page = userService.page(new Page<>(pageNum, count));
//            // 在结果中放一个list集合
//            result.put("list", page.getRecords());
//            result.put("total", page.getTotal());
//            // 返回json
//            return objectMapper.writeValueAsString(result);
//        }
        //分页查询
        /*分页构造函数
        Params:
        current – 当前页
        size – 每页显示条数*/

        //查询构造条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // 成立的表达式，字段名 和数值
        queryWrapper.like(keyword != null && !keyword.equals(""), "name", keyword);

        Page<User> page = userService.page(new Page<>(pageNum, pageSize), queryWrapper);
        // 在结果中放一个list集合
        result.put("list", page.getRecords());
        result.put("total", page.getTotal());
        // 返回json
        return objectMapper.writeValueAsString(result);
    }

    //用户的登录查询
    @RequestMapping(value = "/loginUser")
    public String loginUser(User user) throws JsonProcessingException {
//         定义一个map来存放json的键值对
        Map result = new HashMap();

        //创建条件构造器
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //查询条件、用户名及密码相等 eq
        queryWrapper.eq("name", user.getName());
        queryWrapper.eq("password", user.getPassword());
        //getOne
        User one = userService.getOne(queryWrapper);

        //判断数据库是否有数据
        if (one != null) {
            result.put("ok", true);
            result.put("user", one);
        } else {
            result.put("ok", false);
            result.put("message", "用户姓名或者密码错误");
        }
        // 返回
        return objectMapper.writeValueAsString(result);
    }

    // 用户的注册
    @PostMapping(value = "/registUser")
    public String registUser(@ModelAttribute User user) throws JsonProcessingException {
//         定义一个map来存放json的键值对
        Map result = new HashMap();

        boolean one = userService.save(user);
        //判断数据库是否有数据
        if (one != false) {
            result.put("ok", true);
            result.put("user", user);
        } else {
            result.put("ok", false);
            result.put("message", "用户姓名或者密码错误");
        }
        // 返回
        return objectMapper.writeValueAsString(result);
    }

    @PostMapping(value = "/insert")
    public String insertUser(@ModelAttribute User user) throws JsonProcessingException {
//         定义一个map来存放json的键值对
        Map result = new HashMap();

        boolean one = userService.save(user);
        //判断数据库是否有数据
        if (one != false) {
            result.put("ok", true);
            result.put("user", user);
        } else {
            result.put("ok", false);
            result.put("message", "用户姓名或者密码错误");
        }
        // 返回
        return objectMapper.writeValueAsString(result);
    }

    @PutMapping(value = "/update")
    public String updateUser(@ModelAttribute User user) throws JsonProcessingException {
//         定义一个map来存放json的键值对
        Map result = new HashMap();

        boolean one = userService.updateById(user);
        //判断数据库是否有数据
        if (one != false) {
            result.put("ok", true);
            result.put("user", user);
        } else {
            result.put("ok", false);
            result.put("message", "修改用户错误");
        }
        // 返回
        return objectMapper.writeValueAsString(result);
    }

    @DeleteMapping(value = "/delete/{id}")
    public String deleteUser(@PathVariable(value = "id") Integer Id) throws JsonProcessingException {
//         定义一个map来存放json的键值对
        Map result = new HashMap();

        boolean one = userService.removeById(Id);
        //判断数据库是否有数据
        if (one != false) {
            result.put("ok", true);
            result.put("user", Id);
        } else {
            result.put("ok", false);
            result.put("message", "删除用户错误");
        }
        // 返回
        return objectMapper.writeValueAsString(result);
    }
}
